造輪子 python group------給定一個字母或者字符串,按順序計算字母或者字符串出現的字符和次數

給定一個字母或者字符串,按順序計算字母或者字符串出現的字符和次數

example:

input = [1, 1, 1, 2, 3, 3, 3, 2, 2, 5, 5, 8, 8, 0]
except = [[1, 3], [2, 1], [3, 3], [2, 2], [5, 2], [8, 2], [0, 1]]

因爲字典裏面key是唯一的,並且無序。不能用元組來存儲。只能用列表

def list_count(input_list):
    ret = []
    for key, value in enumerate(input_list):
        if key == len(input_list)-1:
            if input_list[-1] != input_list[-2]:  # 判斷結尾,如果最後一個數和前一個不同就直接添加。否則pass.
                ret.append([value, 1])
            break
        elif input_list[key] == input_list[key+1]: # 判斷當前值和後面的值是否相同。
            if ret and ret[-1][0] == value:  # 如果ret不爲空並且ret最後一個列表裏面的key等於當前值,執行加1操作。
                ret[-1][-1] += 1
            else:
                # 否則append進去一個列表,值爲2.
                ret.append([input_list[key], 2])
        elif input_list[key] != input_list[key+1]:
            # 如果當前值不等於下一個值。
            if not ret or ret[-1][0] != value:  # 如果ret爲空,或者ret最後一個列表裏面的key不等於當前值,添加一個列表到ret中,值爲1。
                ret.append([input_list[key], 1])
    return ret

之所以會寫這個,是在leetcode上遇到的問題。這種寫法比較笨。當時考慮其他的沒有嘗試這種做法, 這裏記錄一下這種寫法。 原題

原題還有一些其他的解法,比如用正則,或者

----------------------------------分割線--------------------------------------------------
寫完了才發現這方法python已經封裝了。
from itertools import groupby
這個方法之前就看到了,一直沒用到。時間長就忘了還有這樣一個函數。

from itertools import groupby
[[key, len(list(group))] for key, group in itertools.groupby("applabbc")]

具體用法看官方文檔是最好不過了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章